package com.chang.common.utils;


import cn.hutool.core.util.StrUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * @author changzhenxi
 * @param:
 * @return:
 * @date 2024/12/10 - 15:45
 * @history 2024/12/10 - 15:45 changzhenxi create 这里直接整合的hutool jwt工具类
 */
public class JwtUtils {

    public static final long EXPIRE = 1000 * 60 * 60 * 24; //token过期时间
    public static final byte[] APP_SECRET = "123".getBytes();  //密钥

    //生成token字符串的方法
    public static String getToken(String userId) {
        Map<String, Object> map = new HashMap<>() {
            private static final long serialVersionUID = 1L;

            {
                put("userId", userId);
                put("expire_time", EXPIRE);
            }
        };
        return JWTUtil.createToken(map, APP_SECRET);
    }

    /**
     * 判断token是否存在与有效,这个是通过传递的字符串来判断
     *
     * @param token
     * @return
     */
    public static boolean checkToken(String token) {
        if (StrUtil.isBlank(token)) return false;
        return JWTUtil.verify(token, APP_SECRET);
    }

    /**
     * 判断token是否存在与有效,这个是通过传递的请求进行判断
     *
     * @param request
     * @return
     */
    public static boolean checkToken(HttpServletRequest request) {
        String token = request.getHeader("token");
        return checkToken(token);
    }

    /**
     * 根据token获取用户信息.
     *
     * @param request
     * @return
     */
    public static String getMemberIdByRequest(HttpServletRequest request) {
        String token = request.getHeader("token");//前端将cookie中获取的token放在header中,这里工具类就从header中获取
        final JWT jwt = JWTUtil.parseToken(token);
        return jwt.getPayload().getClaim("userId").toString();
    }
}
